package it.unipg.bipod.dataModel;

import java.sql.Timestamp;

/**
 * Operazione mappa un'entita' "operazione" di BiPoD.<br>
 * Le sue proprieta' rispecchiano 1-1 i campi dell'entia' corrispondente.
 * 
 * @author Lorenzo Porzi
 * 
 */
public class Operazione {
	private int idOperazione;
	private Timestamp dataEsecuzione;
	private String tipo;
	private String descrizione;
	private int utente;
	private String hash;
	
	public static final String NUOVA_REGISTRAZIONE = "inserimento registrazione";
	public static final String MODIFICA_REGISTRAZIONE = "modifica registrazione";
	public static final String CANCELLA_REGISTRAZIONE = "cancellazione registrazione";
	public static final String NUOVA_RICHIESTA = "inserimento richiesta";
	public static final String CANCELLA_RICHIESTA = "cancellazione richiesta";
	public static final String NUOVO_BANDO = "inserimento bando";
	
	/**
	 * Costruisce una nuova operazione "vuota".
	 */
	public Operazione() {
		this(0, new Timestamp(System.currentTimeMillis()), NUOVA_REGISTRAZIONE, "", 0, "");
	}
	
	/**
	 * Costruisce un'operazione con le proprieta' specificate.
	 * 
	 * @param idOperazione
	 * @param dataEsecuzione
	 * @param tipo
	 * @param descrizione
	 * @param utente
	 * @param hash
	 */
	public Operazione(int idOperazione, Timestamp dataEsecuzione, String tipo, String descrizione, int utente, String hash) {
		setIdOperazione(idOperazione);
		setDataEsecuzione(dataEsecuzione);
		setTipo(tipo);
		setDescrizione(descrizione);
		setUtente(utente);
		setHash(hash);
	}
	
	/* -----------------
	 * Setters e Getters
	 * ----------------- */
	
	public void setIdOperazione(int idOperazione) {
		this.idOperazione = idOperazione;
	}

	public int getIdOperazione() {
		return idOperazione;
	}

	public void setDataEsecuzione(Timestamp dataEsecuzione) {
		this.dataEsecuzione = dataEsecuzione;
	}
	
	public Timestamp getDataEsecuzione() {
		return dataEsecuzione;
	}

	public void setTipo(String tipo) {
		if (!tipo.equals(NUOVA_REGISTRAZIONE) && !tipo.equals(MODIFICA_REGISTRAZIONE)
				&& !tipo.equals(NUOVA_RICHIESTA) && !tipo.equals(CANCELLA_RICHIESTA)
				&& !tipo.equals(NUOVO_BANDO) && !tipo.equals(CANCELLA_REGISTRAZIONE))
			throw new IllegalArgumentException();
		
		this.tipo = tipo;
	}

	public String getTipo() {
		return tipo;
	}

	public void setDescrizione(String descrizione) {
		this.descrizione = descrizione;
	}

	public String getDescrizione() {
		return descrizione;
	}

	public void setUtente(int utente) {
		this.utente = utente;
	}

	public int getUtente() {
		return utente;
	}

	public void setHash(String hash) {
		this.hash = hash;
	}

	public String getHash() {
		return hash;
	}
	
	/* ------------
	 * Altri metodi
	 * ------------ */

	@Override
	public String toString() {
		return idOperazione + ";" + dataEsecuzione + ";" + descrizione + ";" + tipo + ";" + utente;
	}	
	
	@Override
	public boolean equals(Object operazione) {
		if (operazione instanceof Operazione)
			return getIdOperazione() == ((Operazione)operazione).getIdOperazione();
		
		return false;
	}
}
